///////////////////////////////////////////////////////////////
//  Copyright 2019 John Maddock. Distributed under the Boost
//  Software License, Version 1.0. (See accompanying file
//  LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
//
// We used to use lexical_cast internally for quick conversions from integers
// to strings, but that breaks if the global locale is something other than "C".
// See https://github.com/boostorg/multiprecision/issues/167.
//
#ifndef BOOST_MP_DETAIL_ITOS_HPP
#define BOOST_MP_DETAIL_ITOS_HPP

namespace nil {
    namespace crypto3 {
        namespace multiprecision {
            namespace detail {

                template<class Integer>
                std::string itos(Integer val) {
                    if (!val)
                        return "0";
                    std::string result;
                    bool isneg = false;
                    if (val < 0) {
                        val = -val;
                        isneg = true;
                    }
                    while (val) {
                        result.insert(result.begin(), char('0' + (val % 10)));
                        val /= 10;
                    }
                    if (isneg)
                        result.insert(result.begin(), '-');
                    return result;
                }

            }    // namespace detail
        }        // namespace multiprecision
    }            // namespace crypto3
}    // namespace nil

#endif
